Importer le fichier MapMonde.geojson. Les fichiers de
format *.geojson se lisent comme des fichiers
shapefile (*.shp). N’oublier pas de charger les
bibliothèques nécessaires à la réalisation de ce travail:
sf, tmap.
# Installer les librairies si nécessaires
if (!require("geojsonio")) install.packages("geojsonio")
## Loading required package: geojsonio
## Registered S3 method overwritten by 'geojsonsf':
## method from
## print.geojson geojson
##
## Attaching package: 'geojsonio'
## The following object is masked from 'package:base':
##
## pretty
if (!require("leaflet")) install.packages("leaflet")
## Loading required package: leaflet
if (!require("dbscan")) install.packages("dbscan")
## Loading required package: dbscan
## Warning: package 'dbscan' was built under R version 4.3.3
##
## Attaching package: 'dbscan'
## The following object is masked from 'package:stats':
##
## as.dendrogram
if (!require("sf")) install.packages("sf")
## Loading required package: sf
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.13.0, GDAL 3.8.5, PROJ 9.5.1; sf_use_s2() is TRUE
if (!require("dplyr")) install.packages("dplyr")
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readr)
library(dplyr)
library(dbscan)
library(leaflet)
library(sf)
library(geojsonio)
library(RColorBrewer)
# Lire les données
setwd("~/Desktop/Teluq/SCI-1402/Data/")
df <- read.csv("resultat_sf.csv", sep = ",", header = TRUE, encoding = "UTF-8")
df_clean <- df %>%
filter(!is.na(Longitude), !is.na(Latitude)) %>%
mutate(Longitude = as.numeric(Longitude),
Latitude = as.numeric(Latitude))
coords <- df_clean %>%
select(Longitude, Latitude) %>%
as.matrix()
# Paramètres DBSCAN
eps_values <- seq(0.04, 0.06, by = 0.02)
minPts_values <- seq(30, 40, by = 10)
# Créer la carte Leaflet
carte <- leaflet() %>%
addTiles(group = "Base") %>%
addWMSTiles(
baseUrl = "https://servicescarto.mern.gouv.qc.ca/pes/services/Territoire/SDA_WMS/MapServer/WMSServer",
layers = "Région administrative",
options = WMSTileOptions(format = "image/png", transparent = TRUE),
attribution = "© MERN - Gouvernement du Québec",
group = "Contours SDA"
)
# Liste pour garder le nom des groupes
group_names <- c()
pal <- colorNumeric(palette = "YlOrRd", domain = df_clean$n_points, na.color = "gray")
# Générer les itérations de clustering
for (eps in eps_values) {
for (minPts in minPts_values) {
label <- paste0("eps=", eps, "_minPts=", minPts)
group_names <- c(group_names, label)
# Appliquer DBSCAN
db <- dbscan(coords, eps = eps, minPts = minPts)
df_iter <- df_clean %>%
mutate(cluster = as.factor(db$cluster))
# Ajouter le nombre de points par cluster
cluster_counts <- df_iter %>%
count(cluster, name = "n_points")
df_iter <- df_iter %>%
left_join(cluster_counts, by = "cluster")
# Ajouter à la carte dans un groupe spécifique
carte <- carte %>%
addCircleMarkers(
data = df_iter,
lng = ~Longitude,
lat = ~Latitude,
color = ~ifelse(cluster == 0, "gray", RColorBrewer::brewer.pal(2, "Set1")[as.integer(cluster)]),
radius = ~ifelse(cluster == 0, 1, 4),
fillOpacity = 0.8,
stroke = FALSE,
group = label,
label = ~paste("Cluster:", cluster, "<br/>Nb points:", n_points)
)
}
}
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(2, "Set1"): minimal value for n is 3, returning requested palette with 3 different levels
# Ajouter le contrôle des couches avec baseGroups
carte <- carte %>%
addLayersControl(
baseGroups = group_names,
overlayGroups = c("Contours SDA"),
options = layersControlOptions(collapsed = FALSE)
) %>%
hideGroup(setdiff(group_names, group_names[1])) # Cacher tous sauf le 1er
# Afficher la carte
carte